import axios from 'axios'

// import router from '@/router/router.js'
import { useUserStore } from 'stores/useUserStore.js'
import qs from 'qs'
import Config from '@/config/config'

import { useQuasar } from 'quasar'
const $q = useQuasar()
// 创建一个 axios 实例
const request = axios.create({
  baseURL: Config.env === 'dev' ? '/api' : '',
  timeout: 10000,
})

// 请求失败后隐藏加载动画
const triggerPositive = (msg) => {
  $q.notify({
    type: 'positive',
    message: msg,
  })
}
// 请求拦截器
request.interceptors.request.use(
  (config) => {
    // 获取用户的 token
    const userStore = useUserStore()
    const token = userStore.token
    console.log(token)
    // 在请求头中加入 token
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`
      console.log(config)
    }

    return config
  },
  (error) => {
    // 请求错误时做些什么
    console.error('请求错误:', error)

    return Promise.reject(error)
  },
)

// 响应拦截器
request.interceptors.response.use(
  (response) => {
    // 请求成功后隐藏加载动画

    console.log('响应拦截:', response)
    return response
  },
  async (error) => {
    const { response } = error

    // 统一处理 HTTP 错误码
    if (response) {
      const status = response.status
      switch (status) {
        case 500:
          // 服务器错误

          triggerPositive('服务器内部错误，请稍后重试')
          break
        case 401:
          // 未授权（未登录）

          triggerPositive('身份验证失败，请重新登录')
          // await router.push('/login')
          break
        case 403:
          // 禁止访问

          triggerPositive('您没有权限访问此资源')
          break
        case 404:
          // 请求的资源未找到
          triggerPositive('请求的资源不存在')

          break
        default:
          // 其他错误
          triggerPositive(`请求失败，错误码: ${status}`)

          break
      }
    } else {
      // 网络错误
      $q.notify.registerType('my-notif', {
        icon: 'announcement',
        progress: true,
        color: 'brown',
        textColor: 'white',
        classes: 'glossy',
      })
    }

    return Promise.reject(error) // 保持错误传递
  },
)
const apiRequest = (method, url, params) => {
  console.log(method, url, params)

  return request({
    method,
    url,
    // 如果是 POST 请求且需要请求体数据，使用 data
    ...(method === 'post' ? { data: params } : { params }),
  })
    .then((response) => response.data)
    .catch((error) => {
      console.error(`${method} ${url} 请求失败`, error) // 统一错误日志
      throw error // 抛出错误以便上层处理
    })
}

// 公开通用的请求方法
const ajax = {
  get(url, params) {
    return apiRequest('get', url, params)
  },

  post(url, params, contentType = 'application/json;charset=UTF-8') {
    const userStore = useUserStore()
    const token = userStore.token
    if (token) {
      params.token = token
    }
    return apiRequest('post', url, params, contentType)
  },
  postForm(url, params, contentType = 'application/x-www-form-urlencoded') {
    if (contentType === 'application/x-www-form-urlencoded') {
      // 确保 params 是有效的对象
      if (!params || typeof params !== 'object') {
        return Promise.reject(new Error('Invalid params passed to postForm'))
      }
      params = qs.stringify(params) // 将对象转换为 URL 编码格式
      console.log(params)
    }
    // 调用 apiRequest 处理 POST 请求
    return apiRequest('post', url, params, contentType)
  },
  put(url, data) {
    return apiRequest('put', url, data)
  },

  delete(url, data) {
    return apiRequest('delete', url, data)
  },
}
export default ajax
